package com.tong.hao.ac.api.feign.query;

import com.tong.hao.ac.api.feign.hystrix.QueryUserInfoFallbackFactory;
import com.tong.hao.ac.api.model.in.query.QueryUserInfoIn;
import com.tong.hao.ac.api.model.out.query.QueryUserInfoOut;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author 友野浩二
 * @Description // 使用@FeignClient注解来指定这个接口所要调用的服务名称，接口中定义的各个函数使用 Spring MVC 的注解就可以来绑定服务提供方的 REST 接口
 *
 * <pre>
 *  @FeignClient : 用于通知feign组件对该接口进行代理(不需要编写接口实现)，使用者可直接通过@Autowired注入。
 *      fallback指定的降级类一定要添加@Component注解将其加入到spring容器，
 *          但是有个问题，就是服务消费者通过@Autowired注入时会有红色波浪线提示(虽然说实际上并不会有实际影响)
 *      so，推荐使用fallbackFactory
 *
 *      name 属性值 就是 服务提供者application.ymal中配置的 spring.application.name(应用名);
 *      path 属性值 就是 服务提供者application.ymal中配置的 server.servlet.context-path(应用上下文);
 * <pre>
 * // @FeignClient(name = "${spring.application.name}", path = "${server.servlet.context-path}")
 */
@FeignClient(name = "tong-online-ac", path = "/tong-ac", /*fallback = QueryUserInfoFallback.class*/ fallbackFactory = QueryUserInfoFallbackFactory.class)
public interface IQueryUserInfoFeign {

    /**
     * @return com.tong.hao.ac.api.model.out.query.QueryUserInfoOut
     * @Author 友野浩二
     * @Description 将远程服务http://ip:port/context-path/URI映射为一个本地Java方法调用。
     * @Date 2020/5/5 1:35
     * @Param [queryUserInfoIn]
     */
    @RequestMapping(value = "/query/user/info")
    QueryUserInfoOut queryUserInfo(@RequestBody QueryUserInfoIn queryUserInfoIn);

}
